/**
* DeployMan # Thomas Uhrig (Stuttgart, 2014) # www.tuhrig.de
*/
package de.tuhrig.deployman.aws;
import java.util.ArrayList;
import java.util.List;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2Client;
import com.amazonaws.services.ec2.model.AssociateAddressRequest;
import com.amazonaws.services.ec2.model.AuthorizeSecurityGroupIngressRequest;
import com.amazonaws.services.ec2.model.BlockDeviceMapping;
import com.amazonaws.services.ec2.model.CreateTagsRequest;
import com.amazonaws.services.ec2.model.DescribeInstancesResult;
import com.amazonaws.services.ec2.model.EbsBlockDevice;
import com.amazonaws.services.ec2.model.IamInstanceProfileSpecification;
import com.amazonaws.services.ec2.model.Instance;
import com.amazonaws.services.ec2.model.IpPermission;
import com.amazonaws.services.ec2.model.Reservation;
import com.amazonaws.services.ec2.model.Tag;
import com.amazonaws.services.ec2.model.TerminateInstancesRequest;
import static de.tuhrig.deployman.DeployMan.*;
/**
* @author tuhrig
*/
public class Ec2 implements IAws<AmazonEC2> {
@Override
public AmazonEC2 getClient() {
AWSCredentials credentials = new Aws().getAwsCredentials();
AmazonEC2 ec2 = new AmazonEC2Client(credentials);
String region = getUserProperty(AWS_REGION);
String endpoint = "https://ec2." + region + ".amazonaws.com"; //$NON-NLS-1$ //$NON-NLS-2$
ec2.setEndpoint(endpoint);
return ec2;
}
public void associate(String instanceId, String elasticIp) {
Instance instance = getEC2InstanceById(instanceId);
console.write("Associate " + instance.getInstanceId() + " with IP " + elasticIp); //$NON-NLS-1$ //$NON-NLS-2$
console.newLine();
getClient().associateAddress(
new AssociateAddressRequest().withInstanceId(instance.getInstanceId()).withPublicIp(
elasticIp));
}
public void tag(String instanceId, String tag) {
tag(instanceId, new Tag("Name", tag)); //$NON-NLS-1$
console.newLine();
}
public void openPort(String securityGroup, int port) {
IpPermission permission = new IpPermission().withIpProtocol("tcp") //$NON-NLS-1$
.withFromPort(port).withToPort(port).withIpRanges("0.0.0.0/0"); //$NON-NLS-1$
AuthorizeSecurityGroupIngressRequest request =
new AuthorizeSecurityGroupIngressRequest().withGroupName(securityGroup).withIpPermissions(
permission);
getClient().authorizeSecurityGroupIngress(request);
}
public void tag(String instanceId, Tag tag) {
CreateTagsRequest request = new CreateTagsRequest().withResources(instanceId).withTags(tag);
AmazonEC2 ec2 = getClient();
ec2.createTags(request);
console.write("Tag " + instanceId + " as " + tag); //$NON-NLS-1$ //$NON-NLS-2$
}
public void printEC2Instances() {
List<Instance> instances = getEC2Instances();
if (instances.size() == 0)
console.write("no instances\n"); //$NON-NLS-1$
else
console.printEc2Instances(instances);
}
public void terminateEC2InstanceById(String id) {
AmazonEC2 ec2 = getClient();
ec2.terminateInstances(new TerminateInstancesRequest().withInstanceIds(id));
console.write("EC2 instance " + id + " will be terminated"); //$NON-NLS-1$ //$NON-NLS-2$
}
public IamInstanceProfileSpecification getIamInstanceProfileSpecification(String name) {
return new IamInstanceProfileSpecification().withName(name);
}
public BlockDeviceMapping getBlockDeviceMapping(String deviceName, int sizeInGb) {
return new BlockDeviceMapping().withDeviceName(deviceName).withEbs(
new EbsBlockDevice().withVolumeSize(sizeInGb));
}
public Instance getEC2InstanceById(String instanceId) {
for (Instance instance : getEC2Instances()) {
if (instance.getInstanceId().equals(instanceId))
return instance;
}
return null;
}
public List<Instance> getEC2Instances() {
DescribeInstancesResult request = getClient().describeInstances();
List<Instance> instances = new ArrayList<>();
for (Reservation reservation : request.getReservations())
instances.addAll(reservation.getInstances());
return instances;
}
public String getHostNameOfInstance(String instanceId) {
Instance instance = getEC2InstanceById(instanceId);
return instance.getPublicDnsName();
}
}